#ifndef WAVELET_H
#define WAVELET_H

#include <QVector>
#include <QString>

class Wavelet {
public:
    // 构造函数
    Wavelet(const QString& wname = "db1");

    // 小波分解
    void wavedec(const QVector<double>& x, int n, QVector<double>& c, QVector<int>& l);

    // 小波重构
    void waverec(const QVector<double>& c, const QVector<int>& l, QVector<double>& x);

private:
    // 获取小波滤波器
    void getFilters(const QString& wname, QVector<double>& Lo_D, QVector<double>& Hi_D, QVector<double>& Lo_R, QVector<double>& Hi_R);

    // 单级小波分解
    void dwt(const QVector<double>& x, const QVector<double>& Lo_D, const QVector<double>& Hi_D, QVector<double>& approx, QVector<double>& detail);

    // 单级小波重构
    void idwt(const QVector<double>& approx, const QVector<double>& detail, const QVector<double>& Lo_R, const QVector<double>& Hi_R, QVector<double>& x);

    QVector<double> Lo_D, Hi_D, Lo_R, Hi_R; // 分解和重构滤波器
};

#endif // WAVELET_H
